home *** CD-ROM | disk | FTP | other *** search
/ Clickx 47 / Clickx 47.iso / assets / software / Miro_Installer.exe / xulrunner / chrome / toolkit.jar / content / mozapps / profile / profileSelection.js < prev    next >
Encoding:
JavaScript  |  2005-09-18  |  8.8 KB  |  278 lines

  1. /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * ***** BEGIN LICENSE BLOCK *****
  4.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  5.  *
  6.  * The contents of this file are subject to the Mozilla Public License Version
  7.  * 1.1 (the "License"); you may not use this file except in compliance with
  8.  * the License. You may obtain a copy of the License at
  9.  * http://www.mozilla.org/MPL/
  10.  *
  11.  * Software distributed under the License is distributed on an "AS IS" basis,
  12.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  13.  * for the specific language governing rights and limitations under the
  14.  * License.
  15.  *
  16.  * The Original Code is Mozilla Communicator client code, released
  17.  * March 31, 1998.
  18.  *
  19.  * The Initial Developer of the Original Code is
  20.  * Netscape Communications Corporation.
  21.  * Portions created by the Initial Developer are Copyright (C) 1998-1999
  22.  * the Initial Developer. All Rights Reserved.
  23.  *
  24.  * Contributor(s):
  25.  *   Ben Goodger (03/01/00)
  26.  *   Seth Spitzer (28/10/99)
  27.  *   Dan Veditz <dveditz@netscape.com>
  28.  *   Benjamin Smedberg <bsmedberg@covad.net>
  29.  *
  30.  * Alternatively, the contents of this file may be used under the terms of
  31.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  32.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  33.  * in which case the provisions of the GPL or the LGPL are applicable instead
  34.  * of those above. If you wish to allow use of your version of this file only
  35.  * under the terms of either the GPL or the LGPL, and not to allow others to
  36.  * use your version of this file under the terms of the MPL, indicate your
  37.  * decision by deleting the provisions above and replace them with the notice
  38.  * and other provisions required by the GPL or the LGPL. If you do not delete
  39.  * the provisions above, a recipient may use your version of this file under
  40.  * the terms of any one of the MPL, the GPL or the LGPL.
  41.  *
  42.  * ***** END LICENSE BLOCK ***** */
  43.  
  44. const C = Components.classes;
  45. const I = Components.interfaces;
  46.  
  47. const ToolkitProfileService = "@mozilla.org/toolkit/profile-service;1";
  48. const PromptService = "@mozilla.org/embedcomp/prompt-service;1";
  49.  
  50. var gDialogParams;
  51. var gProfileManagerBundle;
  52. var gBrandBundle;
  53. var gProfileService;
  54. var gPromptService;
  55.  
  56. function startup()
  57. {
  58.   try {
  59.     gDialogParams = window.arguments[0].
  60.       QueryInterface(I.nsIDialogParamBlock);
  61.  
  62.     gProfileService = C[ToolkitProfileService].getService(I.nsIToolkitProfileService);
  63.  
  64.     gProfileManagerBundle = document.getElementById("bundle_profileManager");
  65.     gBrandBundle = document.getElementById("bundle_brand");
  66.  
  67.     gPromptService = C[PromptService].getService(I.nsIPromptService);
  68.  
  69.     document.documentElement.centerWindowOnScreen();
  70.  
  71.     var profilesElement = document.getElementById("profiles");
  72.  
  73.     var profileList = gProfileService.profiles;
  74.     while (profileList.hasMoreElements()) {
  75.       var profile = profileList.getNext().QueryInterface(I.nsIToolkitProfile);
  76.  
  77.       var listitem = profilesElement.appendItem(profile.name, "");
  78.  
  79.       var tooltiptext =
  80.         gProfileManagerBundle.getFormattedString("profileTooltip", [profile.name, profile.rootDir.path]);
  81.       listitem.setAttribute("tooltiptext", tooltiptext);
  82.       listitem.setAttribute("class", "listitem-iconic");
  83.       listitem.profile = profile;
  84.       try {
  85.         if (profile === gProfileService.selectedProfile) {
  86.           setTimeout(function(a) {
  87.             profilesElement.ensureElementIsVisible(a);
  88.             profilesElement.selectItem(a);
  89.           }, 0, listitem);
  90.         }
  91.       }
  92.       catch(e) { }
  93.     }
  94.  
  95.     var autoSelectLastProfile = document.getElementById("autoSelectLastProfile");
  96.     autoSelectLastProfile.checked = gProfileService.startWithLastProfile;
  97.     profilesElement.focus();
  98.   }
  99.   catch(e) {
  100.     window.close();
  101.     throw (e);
  102.   }
  103. }
  104.  
  105. function acceptDialog()
  106. {
  107.   var appName = gBrandBundle.getString("brandShortName");
  108.  
  109.   var profilesElement = document.getElementById("profiles");
  110.   var selectedProfile = profilesElement.selectedItem;
  111.   if (!selectedProfile) {
  112.     var pleaseSelectTitle = gProfileManagerBundle.getString("pleaseSelectTitle");
  113.     var pleaseSelect =
  114.       gProfileManagerBundle.getFormattedString("pleaseSelect", [appName]);
  115.     gPromptService.alert(window, pleaseSelectTitle, pleaseSelect);
  116.  
  117.     return false;
  118.   }
  119.  
  120.   var profileLock;
  121.  
  122.   try {
  123.     profileLock = selectedProfile.profile.lock({ value: null });
  124.   }
  125.   catch (e) {
  126.     var lockedTitle = gProfileManagerBundle.getString("profileLockedTitle");
  127.     var locked =
  128.       gProfileManagerBundle.getFormattedString("profileLocked2", [appName, selectedProfile.profile.name, appName]);
  129.     gPromptService.alert(window, lockedTitle, locked);
  130.  
  131.     return false;
  132.   }
  133.   gDialogParams.objects.insertElementAt(profileLock.nsIProfileLock, 0, false);
  134.  
  135.   var autoSelectLastProfile = document.getElementById("autoSelectLastProfile");
  136.   gProfileService.startWithLastProfile = autoSelectLastProfile.checked;
  137.   gProfileService.selectedProfile = selectedProfile.profile;
  138.  
  139.   /* Bug 257777 */
  140.   gProfileService.startOffline = document.getElementById("offlineState").checked;
  141.  
  142.   gDialogParams.SetInt(0, 1);
  143.  
  144.   return true;
  145. }
  146.  
  147. // handle key event on listboxes
  148. function onProfilesKey(aEvent)
  149. {
  150.   switch( aEvent.keyCode ) 
  151.   {
  152.   case 46:
  153.     confirmDelete();
  154.     break;
  155.   case "VK_F2":
  156.     renameProfile();
  157.     break;
  158.   }
  159. }
  160.  
  161. function onProfilesDblClick(aEvent)
  162. {
  163.   if(aEvent.target.localName == "listitem")
  164.     document.documentElement.acceptDialog();
  165. }
  166.  
  167. // invoke the createProfile Wizard
  168. function CreateProfileWizard()
  169. {
  170.   window.openDialog('chrome://mozapps/content/profile/createProfileWizard.xul',
  171.                     '', 'centerscreen,chrome,modal,titlebar', gProfileService);
  172. }
  173.  
  174. /**
  175.  * Called from createProfileWizard to update the display.
  176.  */
  177. function CreateProfile(aProfile)
  178. {
  179.   var profilesElement = document.getElementById("profiles");
  180.  
  181.   var listitem = profilesElement.appendItem(aProfile.name, "");
  182.  
  183.   var tooltiptext =
  184.     gProfileManagerBundle.getFormattedString("profileTooltip", [aProfile.name, aProfile.rootDir.path]);
  185.   listitem.setAttribute("tooltiptext", tooltiptext);
  186.   listitem.setAttribute("class", "listitem-iconic");
  187.   listitem.profile = aProfile;
  188.  
  189.   profilesElement.ensureElementIsVisible(listitem);
  190.   profilesElement.selectItem(listitem);
  191. }
  192.  
  193. // rename the selected profile
  194. function RenameProfile()
  195. {
  196.   var profilesElement = document.getElementById("profiles");
  197.   var selectedItem = profilesElement.selectedItem;
  198.   if (!selectedItem) {
  199.     return false;
  200.   }
  201.  
  202.   var selectedProfile = selectedItem.profile;
  203.  
  204.   var oldName = selectedProfile.name;
  205.   var newName = {value: oldName};
  206.  
  207.   var dialogTitle = gProfileManagerBundle.getString("renameProfileTitle");
  208.   var msg =
  209.     gProfileManagerBundle.getFormattedString("renameProfilePrompt", [oldName]);
  210.  
  211.   if (gPromptService.prompt(window, dialogTitle, msg, newName, null, {value:0})) {
  212.     newName = newName.value;
  213.  
  214.     // User hasn't changed the profile name. Treat as if cancel was pressed.
  215.     if (newName == oldName)
  216.       return false;
  217.  
  218.     try {
  219.       selectedProfile.name = newName;
  220.     }
  221.     catch (e) {
  222.       var alTitle = gProfileManagerBundle.getString("profileNameInvalidTitle");
  223.       var alMsg = gProfileManagerBundle.getFormattedString("profileNameInvalid", [newName]);
  224.       gPromptService.alert(window, alTitle, alMsg);
  225.       return false;
  226.     }
  227.  
  228.     selectedItem.label = newName;
  229.     var tooltiptext =
  230.       gProfileManagerBundle.getFormattedString("profileTooltip", [newName, aProfile.rootDir.path]);
  231.     listitem.setAttribute("tooltiptext", tooltiptext);
  232.  
  233.     return true;
  234.   }
  235.  
  236.   return false;
  237. }
  238.  
  239. function ConfirmDelete()
  240. {
  241.   var deleteButton = document.getElementById("delbutton");
  242.   var profileList = document.getElementById( "profiles" );
  243.  
  244.   var selectedItem = profileList.selectedItem;
  245.   if (!selectedItem) {
  246.     return false;
  247.   }
  248.  
  249.   var selectedProfile = selectedItem.profile;
  250.   var deleteFiles = false;
  251.  
  252.   if (selectedProfile.rootDir.exists()) {
  253.     var dialogTitle = gProfileManagerBundle.getString("deleteTitle");
  254.     var dialogText =
  255.       gProfileManagerBundle.getFormattedString("deleteProfile",
  256.                                                [selectedProfile.rootDir.path]);
  257.  
  258.     var buttonPressed = gPromptService.confirmEx(window, dialogTitle, dialogText,
  259.                           (gPromptService.BUTTON_TITLE_IS_STRING * gPromptService.BUTTON_POS_0) +
  260.                           (gPromptService.BUTTON_TITLE_CANCEL * gPromptService.BUTTON_POS_1) +
  261.                           (gPromptService.BUTTON_TITLE_IS_STRING * gPromptService.BUTTON_POS_2),
  262.                           gProfileManagerBundle.getString("dontDeleteFiles"),
  263.                           null,
  264.                           gProfileManagerBundle.getString("deleteFiles"),
  265.                           null, {value:0});
  266.     if (buttonPressed == 1)
  267.       return false;
  268.  
  269.     if (buttonPressed == 2)
  270.       deleteFiles = true;
  271.   }
  272.   
  273.   selectedProfile.remove(deleteFiles);
  274.   selectedItem.parentNode.removeChild(selectedItem);
  275.  
  276.   return true;
  277. }
  278.